Software license management systems typically obtain authorization data from a user who wishes to use the software, for example, by requesting a password, searching for a dongle coupled to the computer, or a specific media disk in a drive, scanning a fingerprint, or otherwise obtaining data from a security token. When the license management system then compares the authorization data, or else the result of an algorithm operating on the authorization data, for example a hash function, with security criteria. If there is a match, the license management system launches execution of the protected software. If there is no match, the license management system is supposed to deny access to the protected software.
Unfortunately, there is a common software cracking technique, known as “branch jamming”, in which the critical decision point, often a conditional jump instruction, in the security system is identified and changed. Possible changes include replacing the conditional jump with an unconditional jump or else a no operation (NOP) instruction. This change defeats the intentions of the software security programmer, and permits access to the protected software without the proper authorization data. This type of software attack is often quite effective when the software license management system and the protected software both reside on a computer system under the control of the attacker.